from api_server.api_recruit import ApiRecruit
from crawler_core.constant.constants import Constants
from crawler_core.constant.constants_api import ConstantAPI
from crawler_core.utils.redis_utils import RedisUtils
from lib.sys.logger_factory import LoggerFactory


class TaskApiSearch:
    logger = LoggerFactory.getLogger("TaskApiSearch")

    @staticmethod
    def start(task_id, context):
        # 首先获取登录 异常 信息
        r_data = RedisUtils.getApiSearchReturn(task_id)
        if r_data:
            # 登录异常
            TaskApiSearch.logger.info("TaskApiSearch -- 获取API任务, 登录异常，返回任务 ...")
            RedisUtils.delEventTask(task_id)
            RedisUtils.setLoginTask(task_id)
            return
        else:
            # 获取缓存池 解析数据
            s_data = RedisUtils.getCacheSearchData(task_id)
            if s_data:
                code = s_data[Constants.ANALYSIS_CODE]
                if code == ConstantAPI.RETURN_ERROR_ANALYSIS:
                    TaskApiSearch.logger.info("TaskApiSearch -- 获取API任务 -- [%s] --，解析异常， 删除任务 ..." % task_id)
                    # @TODO 上报错误
                    json_data = RedisUtils.getEventTask(task_id)
                    root_task_id = json_data[Constants.CONTEXT_ROOT_TASK_ID]
                    RedisUtils.refreshEventSearchContextIsOver(root_task_id, 1)
                    # 移除任务
                    RedisUtils.delEventTask(task_id)
                    RedisUtils.removeCacheSearchData(task_id)
                else:
                    TaskApiSearch.logger.info("TaskApiSearch -- 获取API任务 -- [%s] --， 查询完成，返回任务  ..." % task_id)
                    # 返回解析数据
                    _list_data = s_data[Constants.ANALYSIS_DATA]
                    ApiRecruit.resume_search_callback(_list_data)
                    # 更新状态 判断任务是否结束
                    root_task_id = context[Constants.CONTEXT_ROOT_TASK_ID]
                    RedisUtils.refreshEventSearchContext(root_task_id, len(_list_data))
                    # 移除任务
                    RedisUtils.delEventTask(task_id)
                    RedisUtils.removeCacheSearchData(task_id)
                    RedisUtils.removeApiSearchReturn(task_id)

            else:
                pass
